package com.ruoyi.web.lambda;

/**
 * @Program: RuoYi-Vue-chy->StudentDemo
 * @Description: 引用构造器
 * @Author: hongyu.chen
 * @Date: 2025-03-07 21:40
 * @Version： 1.0
 **/
/*
    定义一个类(Student1)，里面有两个成员变量(name,age)
        并提供无参构造方法和带参构造方法，以及成员变量对应的get和set方法
    定义一个接口(StudentBuilder)，里面定义一个抽象方法
        Student1 build(String name,int age);
    定义一个测试类(StudentDemo)，在测试类中提供两个方法
        一个方法是:useStudentBuilder(StudentBuilder sb)
        一个方法是主方法，在主方法中调用useStudentBuilder方法
 */
public class StudentDemo {
    public static void main(String[] args) {

        useStudentBuilder(new StudentBuilder() {
            @Override
            public Student1 build(String name, int age) {
                Student1 s = new Student1(name,age);
                return s;
            }
        });

        System.out.println( "----------------" );
        useStudentBuilder((String name, int age) -> {
            return new Student1(name,age);
        });

        System.out.println( "----------------1111");
        useStudentBuilder((name, age) -> new Student1(name,age));

        System.out.println( "----------------引用构造器");
        //引用构造器
        useStudentBuilder(Student1::new);

        //lambda表达式被构造器替代的时候，它的形式参数全部传递给构造器作为参数
    }

    public static void useStudentBuilder(StudentBuilder sb){
        Student1 s = sb.build("陈泓宇",18);
        System.out.println(s.getName() + "--" + s.getAge());
    }
}
